<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>局部更新文档 | Elasticsearch: 权威指南 | Elastic</title>
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
</head>
<body>
<div class="main-container">
    <section id="content">
        
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原文地址: <a href="https://www.elastic.co/guide/cn/elasticsearch/guide/current/_partial_updates_to_a_document.html" rel="nofollow">https://www.elastic.co/guide/cn/elasticsearch/guide/current/_partial_updates_to_a_document.html</a>, 版权归 www.elastic.co 所有<br/>
                            英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/guide/current/_partial_updates_to_a_document.html" rel="nofollow">https://www.elastic.co/guide/en/elasticsearch/guide/current/_partial_updates_to_a_document.html</a>
                            </div>
                        <!-- start body -->
                  <div class="page_header">
<b>请注意:</b><br>本书基于 Elasticsearch 2.x 版本，有些内容可能已经过时。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch: 权威指南</a></span>
»
<span class="breadcrumb-link"><a href="getting-started.html">基础入门</a></span>
»
<span class="breadcrumb-link"><a href="distributed-docs.html">分布式文档存储</a></span>
»
<span class="breadcrumb-node">局部更新文档</span>
</div>
<div class="navheader">
<span class="prev">
<a href="distrib-read.html">« 取回一个文档</a>
</span>
<span class="next">
<a href="distrib-multi-doc.html">多文档模式 »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="_partial_updates_to_a_document"></a>局部更新文档<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elasticsearch-cn/elasticsearch-definitive-guide/edit/cn/040_Distributed_CRUD/25_Partial_updates.asciidoc">edit</a>
</h2>
</div></div></div>
<p>如 <a class="xref" href="_partial_updates_to_a_document.html#img-distrib-update" title="局部更新文档">Figure 11, “局部更新文档”</a> 所示，<code class="literal">update</code> API 结合了先前说明的读取和写入模式。</p>
<div id="img-distrib-update" class="imageblock">
<div class="content">
<img src="../images/elas_0404.png" alt="局部更新文档">
</div>
<div class="title">Figure 11. 局部更新文档</div>
</div>
<p>以下是部分更新一个文档的步骤：</p>
<div class="olist orderedlist">
<ol class="orderedlist">
<li class="listitem">
客户端向 <code class="literal">Node 1</code> 发送更新请求。
</li>
<li class="listitem">
它将请求转发到主分片所在的 <code class="literal">Node 3</code> 。
</li>
<li class="listitem">
<code class="literal">Node 3</code> 从主分片检索文档，修改 <code class="literal">_source</code> 字段中的 JSON ，并且尝试重新索引主分片的文档。
如果文档已经被另一个进程修改，它会重试步骤 3 ，超过 <code class="literal">retry_on_conflict</code> 次后放弃。
</li>
<li class="listitem">
如果 <code class="literal">Node 3</code> 成功地更新文档，它将新版本的文档并行转发到 <code class="literal">Node 1</code> 和 <code class="literal">Node 2</code> 上的副本分片，重新建立索引。
一旦所有副本分片都返回成功， <code class="literal">Node 3</code> 向协调节点也返回成功，协调节点向客户端返回成功。
</li>
</ol>
</div>
<p><code class="literal">update</code> API 还接受在 <a class="xref" href="distrib-write.html" title="新建、索引和删除文档">新建、索引和删除文档</a> 章节中介绍的 <code class="literal">routing</code> 、 <code class="literal">replication</code> 、 <code class="literal">consistency</code> 和 <code class="literal">timeout</code> 参数。</p>
<div class="sidebar">
<div class="titlepage"><div><div>
<p class="title"><strong>基于文档的复制</strong></p>
</div></div></div>
<p>当主分片把更改转发到副本分片时， 它不会转发更新请求。
相反，它转发完整文档的新版本。请记住，这些更改将会异步转发到副本分片，并且不能保证它们以发送它们相同的顺序到达。
如果Elasticsearch仅转发更改请求，则可能以错误的顺序应用更改，导致得到损坏的文档。</p>
</div>
</div>
<div class="navfooter">
<span class="prev">
<a href="distrib-read.html">« 取回一个文档</a>
</span>
<span class="next">
<a href="distrib-multi-doc.html">多文档模式 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>